Serync实现数据同步
sersync是基于Inotify开发的,类似于Inotify-tools的工具,它可以记录下被监听的目录中发生变化的具体某一个文件或一个目录的名字,包括增加、删除、修改,并且可以自定义哪类型操作做同步。
单纯的rsync同步的时候,每次都需要重新遍历整个目录结构,因此效率低,速度慢,而sersync会记录监听的目录发生变化,只同步变更的文件或目录,速度快,效率高。
为方便说明,让读者不混淆,客户端安装sersync,做数据推送,服务端安装rsync,做数据接收存储。
服务端:
服务端安装rsync,centos服务器自带源中就有rsync
yum install rsync
yum install xinted
安装xinted守护进程,可以启动rsync服务,rsync在安装之后,并没有默认的配置文件,我们需要在/etc/下面新建rsyncd.conf文件,并加入以下内容:
log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建
pidfile = /var/run/rsyncd.pid #pid文件的存放位置
lock file = /var/run/rsync.lock #支持max connections参数的锁文件
secrets file = /etc/rsync.pass #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
motd file = /etc/rsyncd.Motd #rsync启动时欢迎信息页面文件位置(文件内容自定义)
[back] #自定义名称
path = /home/back #rsync服务端数据目录路径
uid = root #设置rsync运行权限为root
gid = root #设置rsync运行权限为root
port=873 #默认端口
use chroot = no #默认为true,修改为no,增加对目录文件软连接的备份
read only = no #设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
max connections = 200 #最大连接数
timeout = 600 #设置超时时间
auth users = backuper #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
hosts allow = 192.168.21.129 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = * #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
设置完成后保存退出,在/etc/新建rsync.pass文件,用于存放备份用户认证内容,填写备份[账户:密码],该账户不需要添加到系统中,只用做文件传输验证,这一点要比用scp写脚本备份数据好很多,必须要暴露密码。
chmod 600 /etc/rsync.pass
设置用户验证文件权限为600,权限太高会无法验证
/etc/init.d/xinted start 启动
netstat -ntpl |grep :873 查看是否启动成功
在防火墙中添加为sersync客户端开放873端口
到這里服务端就设置完成了。
客户端:
安装sersync
sersync下载地址:https://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz
下载之后解压
tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
mv GNU-Linux-x86 /usr/local/sersync
解压之后,目录下只有两个文件,一个是配置文件confxml.xml,一个是执行文件sersync2
修改配置文件如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
#定义需要排除的文件,即不需要同步的文件
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
#定义监控事件,即那些操作会被同步
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
#定义需要同步的本地路径及远端服务器地址及模块名称
<sersync>
<localpath watch="/home/web">
<remote ip="192.168.21.127" name="backup"/>
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
#定义验证文件
<commonParams params="-artuz"/>
<auth start="true" users="home_www.osyunwei.com_user" passwordfile="/etc/passwd.txt"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
#定义定时完全同步时间
<crontab start="true" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
设置完成后保存退出。
在/etc下面新建passwd.txt,添加服务端配置的同步账户的密码,并设置600权限。
设置完成后,就可以启动了
/usr/local/sersync/sersync2 -r -d -o /usr/local/sersync/confxml.xml
启动之后,我们尝试在同步的目录中新建及删除操作,在服务端都会立即同步,同步效率很高。
当然,如果你需要多个目录,那就需要多个配置文件,启动多个实例来同步,目前测试发现sersync并不能在同一个配置文件中添加多个localpath而达到同步多个目录的操作。
【nginx优化】使用socket方式链接Nginx优化php-fpm性能
【环境配置】Postfix2.10+ssl+dovecot搭建邮件服务器
【实践分享】Linode VPS和Vultr VPS使用体检对比